package org.moonlight.jvm.rtda.share.heap.symref;

import lombok.Getter;
import org.moonlight.jvm.classfile.constant.info.member.ConstantMemberRefInfo;
import org.moonlight.jvm.rtda.share.methodarea.RtConstantPool;

import java.util.Map;

/**
 * 类成员信息的符号引用 - 字段或者方法都属于类的成员信息，有部分信息共有，且符号引用的解析过程都类似。
 *
 * @author Moonlight
 * @createTime 2023/8/29 17:59
 **/
public class MemberRef extends SymRef {

    /** 名字 **/
    @Getter
    protected String name;
    /** 描述符 **/
    @Getter
    protected String descriptor;

    public MemberRef(RtConstantPool rtCp, ConstantMemberRefInfo refInfo) {
        this.rtCp = rtCp;
        this.copyMemberRefInfo(refInfo);
    }

    public void copyMemberRefInfo(ConstantMemberRefInfo refInfo) {
        this.className = refInfo.className();
        Map<String, String> map = refInfo.nameAndDescriptor();
        this.name = map.get("name");
        this.descriptor = map.get("type");
    }

}
